Racket 命名风格指南

#Innolight

📌 基础命名约定

形式/后缀 示例 含义 / 用途
xxx% frame%, editor% (class)
xxx<%> editor<%>, canvas<%> 接口协议(interface/protocol)
xxx-mixin editor-mixin, text-mixin 类混入(mixin)
xxx? string?, number? 谓词函数(判断返回布尔值)
xxx! set!, vector-set! 副作用函数(修改状态)
xxx->yyy symbol->string 类型转换函数
make-xxx make-hash, make-parameter 构造函数
define/xxx define/public, define/contract 带修饰器的定义(类、模块中)
with-xxx with-output-to-string 作用域控制函数(自动管理资源)
call-with-xxx call-with-input-file 资源操作 + 回调
send / send* (send obj method ...) 对象方法调用(类系统)
parameterize 临时参数绑定上下文

🔤 命名风格

📦 模块/目录命名

命名 说明
private/ 私有模块,不建议直接 require
main.rkt 包或库的默认入口点
lang/ 自定义语言定义路径
info.rkt 包元信息(依赖、版本等)

🧰 常见工具函数命名(标准库)

函数名 说明
for/list 生成列表的 for 循环
define-values 同时定义多个值
syntax-case 宏展开的基本构件
hash-ref, hash-set! 哈希表访问/修改

🧪 命名直觉对照速查

看到名字 大概率表示
结尾是 % 类(class)
包含 <%> 接口(interface)
结尾是 ? 判断函数(predicate)
结尾是 ! 有副作用的操作
包含 -> 类型转换
开头是 with- 控制作用域、临时绑定
开头是 call-with- 使用资源 + 自动清理
开头是 make- 构造函数
使用 define/public 类中公开方法

📚 推荐参考资料